package cn.wfmiss.spring6;

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;



/**
 * Created with IntelliJ IDEA.
 *
 * @Author: wfmiss
 * @Date: 2023/12/29/17:23
 * @Description:
 */
public class TestUser {

    // 创建Logger对象
    private Logger logger= LoggerFactory.getLogger(TestUser.class);


   @Test
   public void testUserObject(){
       // 加载spring配置文件,对象创建
       ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
       // 获取创建对象
       User user = (User) context.getBean("user");
       System.out.println("1:"+user);
       // 使用对象调用方法进行测试
       System.out.print("2:");
       user.add();
       // 手动写日志
       logger.info("### 执行调用成功了！");

   }


    /**
     * 如何使用返回创建的对象？
     * 1、加载bean.xml文件
     * 2、对xml文件进行解析操作
     * 3、获取xml文件bean标签属性值
     *      id属性和class属性值
     * 4、使用 反射 根据类全路径创建对象
     *          // 获取类Class对象
     *         Class clazz = Class.forName("cn.wfmiss.spring6.User");
     *         // 调用方法创建对象
     *         // Object o = clazz.newInstance();
     *         User user = (User) clazz.getDeclaredConstructor().newInstance();
     * 5、创建对象放到哪里？
     *      Map<String,BeanDefinition> beanDefinitionMap
     *      key:唯一标识
     *      value：类的定义（描述信息）
     *
     */
    // 反射创建对象
    @Test
    public void testUserObject1() throws Exception {
        // 获取类Class对象
        Class clazz = Class.forName("cn.wfmiss.spring6.User");
        // 调用方法创建对象
        // Object o = clazz.newInstance();
        User user = (User) clazz.getDeclaredConstructor().newInstance();
        System.out.println(user);
    }
}
